package com.inspinia.base.mq;

/**
 * kafka的配置
 * Created by veblen on 2017/2/28.
 */
//@CfgCenterModule("kafka（消息队列）")
public class KafkaConfig {

    /**
     * kafka服务器地址，多个以逗号隔开
     */
//    @CfgCenterKey(value = "bootstrap.servers", desc = "kafka服务器地址，多个以逗号隔开", defaultValue = "192.168.1.220:9092", effectiveTiming = CfgCenterKeyEffectiveTiming.restart)
    public static final String BOOTSTRAP_SERVERS = null;

    /**
     * kafka是否开启自动提交
     */
//    @CfgCenterKey(value = "enable.auto.commit", desc = "kafka服务器地址，多个以逗号隔开", defaultValue = "false", effectiveTiming = CfgCenterKeyEffectiveTiming.restart)
    public static final Boolean ENABLE_AUTO_COMMIT = null;
    /**
     * 连接超时时间
     */
//    @CfgCenterKey(value = "session.timeout.ms", desc = "连接超时时间", defaultValue = "30000", effectiveTiming = CfgCenterKeyEffectiveTiming.restart)
    public static final Long SESSION_TIMEOUT_MS = null;

    /**
     * key的序列化方式，一般用字符串
     */
//    @CfgCenterKey(value = "key.deserializer", desc = "key的序列化方式，一般用字符串", defaultValue = "org.apache.kafka.common.serialization.StringDeserializer", effectiveTiming = CfgCenterKeyEffectiveTiming.restart)
    public static final String KEY_DESERIALIZER = null;
    /**
     * value的序列化方式，一般用字符串
     */
//    @CfgCenterKey(value = "value.deserializer", desc = "value的序列化方式，一般用字符串", defaultValue = "org.apache.kafka.common.serialization.StringDeserializer", effectiveTiming = CfgCenterKeyEffectiveTiming.restart)
    public static final String VALUE_DESERIALIZER = null;

    /**
     * zookeeper中没有初始化的offset时，如果offset是以下值的回应：
     * smallest：自动复位offset为smallest的offset
     * largest：自动复位offset为largest的offset
     * anything  else：向consumer抛出异常
     */
//    @CfgCenterKey(value = "auto.offset.reset", desc = "zookeeper中没有初始化的offset时，如果offset是以下值的回应：\n" +
//            "smallest：自动复位offset为smallest的offset\n" +
//            "largest：自动复位offset为largest的offset\n" +
//            "anything  else：向consumer抛出异常", defaultValue = "latest", effectiveTiming = CfgCenterKeyEffectiveTiming.restart)
    public static final String AUTO_OFFSET_RESET = null;

    /**
     * 消息的确认模式
     * 0：不保证消息的到达确认，只管发送，低延迟但是会出现消息的丢失，在某个server失败的情况下，有点像TCP
     * 1：发送消息，并会等待leader 收到确认后，一定的可靠性
     * -1：发送消息，等待leader收到确认，并进行复制操作后，才返回，最高的可靠性
     */
//    @CfgCenterKey(value = "value.deserializer", desc = "消息的确认模式\n" +
//            "0：不保证消息的到达确认，只管发送，低延迟但是会出现消息的丢失，在某个server失败的情况下，有点像TCP\n" +
//            "1：发送消息，并会等待leader 收到确认后，一定的可靠性\n" +
//            "-1：发送消息，等待leader收到确认，并进行复制操作后，才返回，最高的可靠性", defaultValue = "0", effectiveTiming = CfgCenterKeyEffectiveTiming.restart)
    public static final Integer ACKS = null;

    /**
     * 消息发送失败后的重试次数
     */
//    @CfgCenterKey(value = "retries", desc = "消息发送失败后的重试次数", defaultValue = "3", effectiveTiming = CfgCenterKeyEffectiveTiming.restart)
    public static final Integer RETRIES = null;

    /**
     * 发送消息每个块的大小
     */
//    @CfgCenterKey(value = "batch.size", desc = "发送消息每个块的大小", defaultValue = "16384", effectiveTiming = CfgCenterKeyEffectiveTiming.restart)
    public static final Integer BATCH_SIZE = null;

    /**
     * producer组将会汇总任何在请求与发送之间到达的消息记录一个单独批量的请求。通常来说，这只有在记录产生速度大于发送速度的时候才能发生。然而，在某些条件下，客户端将希望降低请求的数量，甚至降低到中等负载一下。这项设置将通过增加小的延迟来完成--即，不是立即发送一条记录，producer将会等待给定的延迟时间以允许其他消息记录发送，这些消息记录可以批量处理。这可以认为是TCP种Nagle的算法类似。这项设置设定了批量处理的更高的延迟边界：一旦我们获得某个partition的batch.size，他将会立即发送而不顾这项设置，然而如果我们获得消息字节数比这项设置要小的多，我们需要“linger”特定的时间以获取更多的消息。 这个设置默认为0，即没有延迟。设定linger.ms=5，例如，将会减少请求数目，但是同时会增加5ms的延迟。
     */
//    @CfgCenterKey(value = "linger.ms", desc = "producer组将会汇总任何在请求与发送之间到达的消息记录一个单独批量的请求。通常来说，这只有在记录产生速度大于发送速度的时候才能发生。然而，在某些条件下，客户端将希望降低请求的数量，甚至降低到中等负载一下。这项设置将通过增加小的延迟来完成--即，不是立即发送一条记录，producer将会等待给定的延迟时间以允许其他消息记录发送，这些消息记录可以批量处理。这可以认为是TCP种Nagle的算法类似。这项设置设定了批量处理的更高的延迟边界：一旦我们获得某个partition的batch.size，他将会立即发送而不顾这项设置，然而如果我们获得消息字节数比这项设置要小的多，我们需要“linger”特定的时间以获取更多的消息。 这个设置默认为0，即没有延迟。设定linger.ms=5，例如，将会减少请求数目，但是同时会增加5ms的延迟。", defaultValue = "1", effectiveTiming = CfgCenterKeyEffectiveTiming.restart)
    public static final Integer LINGER_MS = null;

    /**
     * producer可以用来缓存数据的内存大小
     * 如果数据产生速度大于向broker发送的速度，producer会阻塞或者抛出异常，以“block.on.buffer.full”来表明。这项设置将和producer能够使用的总内存相关，但并不是一个硬性的限制，因为不是producer使用的所有内存都是用于缓存。一些额外的内存会用于压缩（如果引入压缩机制），同样还有一些用于维护请求。
     */
//    @CfgCenterKey(value = "buffer.memory", desc = "producer可以用来缓存数据的内存大小", defaultValue = "16384", effectiveTiming = CfgCenterKeyEffectiveTiming.restart)
    public static final Long BUFFER_MEMORY = null;


}

